package czk.jvm.lecture.classloader;

import java.lang.reflect.Method;

public class MyTest20 {
    public static void main(String[] args) throws Exception {
        MyTest16 load1=new MyTest16("load1");
        MyTest16 load2=new MyTest16("load2");
        load1.setPath("E:\\");
        load2.setPath("E:\\");
        Class<?> aClass = load1.loadClass("czk.jvm.lecture.classloader.MyPerson");
        Class<?> aClass1 = load2.loadClass("czk.jvm.lecture.classloader.MyPerson");
        //同一个app类加载器,第二次加载直接返回，不要再加载
        //如果将项目下的class文件删除，则会有两个不同命名空间的类加载器去加载，返回结果是false
        System.out.println(aClass.equals(aClass1));
        Object object1 = aClass.newInstance();
        Object object2 = aClass1.newInstance();
        //如果将项目下的class文件删除，则会有两个不同命名空间的类加载器去加载
        //时候回报错 java.lang.ClassCastException: czk.jvm.lecture.classloader.MyPerson cannot be cast to czk.jvm.lecture.classloader.MyPerson
        Method method = aClass.getMethod("setPerson", Object.class);
        //第一个参数是谁调用这个方法，第二个是方法的参数
        method.invoke(object1,object2);
    }
}
